<template>
	<view class="page-body">
		<!-- 页面内容开始 -->

		<!-- 表格搜索组件开始 -->
		<vk-data-table-query v-model="queryForm1.formData" :columns="queryForm1.columns"
			@search="search"></vk-data-table-query>
		<!-- 表格搜索组件结束 -->

		<!-- 自定义按钮区域开始 -->
		<view>
			<el-row>
				<el-button type="success" size="small" icon="el-icon-circle-plus-outline" @click="addBtn">添加</el-button>
				<el-button type="success" size="small" icon="el-icon-circle-plus-outline"
					@click="addsBtn">导入</el-button>
				<el-link @click="download" style="margin-left: 10px;" type="primary">下载导入模板</el-link>
				<!-- 批量操作 -->
				<el-dropdown :split-button="false" trigger="click" @command="batchBtn">
					<el-button type="danger" size="small" style="margin-left: 20rpx;"
						:disabled="table1.multipleSelection.length === 0">
						批量操作<i class="el-icon-arrow-down el-icon--right"></i>
					</el-button>
					<el-dropdown-menu slot="dropdown">
						<el-dropdown-item :command="1">删除</el-dropdown-item>
						<el-dropdown-item :command="2">批量修改答题时间</el-dropdown-item>
					</el-dropdown-menu>
				</el-dropdown>
			</el-row>
		</view>
		<!-- 自定义按钮区域结束 -->

		<!-- 表格组件开始 -->
		<vk-data-table :page-size="20" ref="table1" :action="table1.action" :columns="table1.columns"
			:query-form-param="queryForm1" :right-btns="['detail_auto', 'update', 'delete']" :selection="true"
			:row-no="true" :pagination="true" @update="updateBtn" @delete="deleteBtn" @current-change="currentChange"
			@selection-change="selectionChange"></vk-data-table>
		<!-- 表格组件结束 -->

		<!-- 添加或编辑的弹窗开始 -->
		<vk-data-dialog v-model="form1.props.show" :title="form1.props.title" width="1000px" mode="form"
			:close-on-click-modal="false">
			<vk-data-form v-model="form1.data" :rules="form1.props.rules" :action="form1.props.action"
				:form-type="form1.props.formType" :columns='form1.props.columns' label-width="120px"
				@success="form1.props.show = false; refresh();"></vk-data-form>
		</vk-data-dialog>
		<!-- 添加或编辑的弹窗结束 -->

		<!-- 页面内容结束 -->
	</view>
</template>

<script>
var that; // 当前页面对象
var vk = uni.vk; // vk实例
var originalForms = {}; // 表单初始化数据

const questionOptions = [{
	value: '1',
	label: "选择"
},
{
	value: '2',
	label: "填空"
}
]

export default {
	data() {
		// 页面数据变量
		return {
			// 页面是否请求中或加载中
			loading: false,
			// init请求返回的数据
			data: {

			},
			// 表格相关开始 -----------------------------------------------------------
			table1: {
				// 表格数据请求地址
				action: "admin/cms/question/sys/getList",
				// 表格字段显示规则
				columns: [
					// 	{
					// 	key: "_id",
					// 	title: "id",
					// 	type: "text",
					// 	width: 220
					// },
					// {
					// 	key: "title",
					// 	title: "标题",
					// 	type: "text",
					// 	width: 200
					// },
					{
						key: "content",
						title: "题干",
						type: "html",
						align: 'left',
						minWidth: 300,
						formatter: (val, row, column, index) => {
							let str = `<div style="height: 30px; over-fllow: hidden; display: flex; align-items: center;">${val}</div>`;
							return str;
						}
					},
					{
						key: "audio",
						title: "附件",
						type: "file",
						minWidth: 80
					},
					{
						key: "type",
						title: "题型",
						type: "radio",
						width: 80,
						defaultValue: 1,
						data: questionOptions
					},
					{
						key: "_add_time",
						title: "添加时间",
						type: "time",
						width: 160,
						sortable: "custom"
					},
					{
						key: "_add_time",
						title: "距离现在",
						type: "dateDiff",
						width: 80
					},
				],
				// 多选框选中的值
				multipleSelection: [],
				// 当前高亮的记录
				selectItem: ""
			},
			// 表格相关结束 -----------------------------------------------------------
			// 表单相关开始 -----------------------------------------------------------
			// 查询表单请求数据
			queryForm1: {
				// 查询表单数据源，可在此设置默认值
				formData: {

				},
				// 查询表单的字段规则 fieldName:指定数据库字段名,不填默认等于key
				columns: [{
					key: "content",
					title: "题干",
					type: "text",
					width: 140,
					mode: "%%"
				},
				{
					key: "type",
					title: "题型",
					type: "select",
					width: 160,
					mode: "%%",
					data: questionOptions
				},
				{
					key: "group", title: "题组", type: "remote-select", placeholder: "请选择分类",
					action: "admin/cms/question-group/sys/getList",
					props: { list: "rows", value: "_id", label: "title" },
					showAll: true,
					actionData: {
						pageSize: 1000
					}
				}
				]
			},
			form1: {

				// 表单请求数据，此处可以设置默认值
				data: {
					type: '1'
				},
				// 表单属性
				props: {
					// 表单请求地址
					action: "",


					// 表单字段显示规则
					"columns": [
						// {
						// 	"key": "title",
						// 	"title": "标题",
						// 	"type": "text",
						// 	"placeholder": "请输入单行文本标题",
						// 	"clearable": true,
						// 	"showLabel": true
						// },	
						{
							key: "group", title: "题目", type: "table-select", placeholder: "请选择题组",
							tag: false,
							action: "admin/cms/question-group/sys/getList",
							multiple: true,
							columns: [
								{
									key: "title",
									title: "题干",
									type: "text",
									minWidth: 150,
									nameKey: true
								},
								{
									key: "remark",
									title: "备注",
									type: "text",
									minWidth: 80,
									defaultValue: 1,
								}, // idKey:true 代表此字段为主键字段，若设置show:["none"],则可以在表格中隐藏该字段的显示
							],
						},
						{
							"key": "type",
							"title": "题型",
							"type": "radio",
							border: true,
							"placeholder": "请选择题型",
							"clearable": true,
							"showLabel": true,
							"data": questionOptions
						}, {
							"key": "content",
							"title": "题干",
							"type": "editor",
							"placeholder": "请输入题干",
							"showLabel": true
						}, {
							"key": "answer",
							showRule: 'type==2',
							"title": "填空答案",
							"type": "text",
							"placeholder": "请输入答案",
							"showLabel": true
						}, {
							key: "options", title: "选项", type: "array<object>", itemWidth: 360,
							showRule: 'type==1',
							showAdd: true,
							showClear: true,
							// 新增一行时,该行的默认值
							defaultValue: {
							},
							rightBtns: ['copy', 'delete'],
							// 每行每个字段对应的渲染规则
							columns: [
								{
									key: "title", title: "选项", type: "text",
									isUnique: true,
									width: 400,
									rules: [
										{ required: true, message: "该项不能为空", trigger: ["change", "blur"] },
									]
								},

								{ key: "right", title: "是否正确", type: "switch", width: 160 },
							]
						},
						{ key: "time", title: "答题时间", type: "number" },
						{ key: "audio", title: "音频", type: "file", buttonText: "点击上传", limit: 1, cloudPathRemoveChinese: true, accept: ".mp3,.wav" },
					],
					"rules": {
						"title": [{
							"required": true,
							"message": "标题不能为空",
							"trigger": "change"
						}],
						"type": [{
							"required": true,
							"message": "题型不能为空",
							"trigger": "change"
						}],
						"options": [{
							"required": true,
							"message": "选项不能为空",
							"trigger": "change"
						}],
						"answer": [{
							"required": true,
							"message": "答案不能为空",
							"trigger": "change"
						}],
						"content": [{
							"required": true,
							"message": "题干不能为空",
							"trigger": "change"
						}],

					},
					// add 代表添加 update 代表修改
					formType: "",
					// 是否显示表单的弹窗
					show: false
				}
			},
			// 其他弹窗表单
			formDatas: {},
			// 表单相关结束 -----------------------------------------------------------
		};
	},
	// 监听 - 页面每次【加载时】执行(如：前进)
	onLoad(options = {}) {
		that = this;
		vk = that.vk;
		that.options = options;
		that.init(options);
	},
	// 监听 - 页面【首次渲染完成时】执行。注意如果渲染速度快，会在页面进入动画完成前触发
	onReady() { },
	// 监听 - 页面每次【显示时】执行(如：前进和返回) (页面每次出现在屏幕上都触发，包括从下级页面点返回露出当前页面)
	onShow() { },
	// 监听 - 页面每次【隐藏时】执行(如：返回)
	onHide() { },
	// 函数
	methods: {
		download() {
			window.open('https://mp-8cf5f258-b2c1-420a-9c6a-1bb5eb4842ab.cdn.bspapp.com/2024/05/30/64160957-32695736-question.xlsx')
		},
		// 页面数据初始化函数
		init(options) {
			originalForms["form1"] = vk.pubfn.copyObject(that.form1);
		},
		// 页面跳转
		pageTo(path) {
			vk.navigateTo(path);
		},
		// 表单重置
		resetForm() {
			vk.pubfn.resetForm(originalForms, that);
		},
		// 搜索
		search() {
			that.$refs.table1.search();
		},
		// 刷新
		refresh() {
			that.$refs.table1.refresh();
		},
		// 获取当前选中的行的数据
		getCurrentRow() {
			return that.$refs.table1.getCurrentRow();
		},
		// 监听 - 行的选中高亮事件
		currentChange(val) {
			that.table1.selectItem = val;
		},
		// 当选择项发生变化时会触发该事件
		selectionChange(list) {
			that.table1.multipleSelection = list;
		},
		// 导入
		addsBtn() {
			if (!this.queryForm1.formData.group) {
				return vk.alert('请先选择将要导入的题组')
			}

			uni.chooseFile({
				count: 1, //默认100
				extension: ['.xls', 'xlsx'],
				success: function (res) {
					// return console.log(res)
					vk.uploadFile({
						title: "上传中...",
						file: res.tempFiles[0],
						fileType: "Excel",
						success(res) {
							vk.showLoading('导入中');
							let url = res.url;
							// 目前 uniapp 的原生富文本 没有 insertVideo api
							vk.callFunction({
								url: 'admin/cms/question/sys/adds',
								title: '导入中...',
								data: {
									excelFileID: url,
									group: that.queryForm1.formData.group
								},
								complete() {
									vk.hideLoading();
								},
								success() {
									vk.hideLoading();
									vk.toast('导入成功')
									that.refresh()
								}
							})
						}
					});
				}
			});
		},
		// 显示添加页面
		addBtn() {
			that.resetForm();
			that.form1.props.action = 'admin/cms/question/sys/add';
			that.form1.props.formType = 'add';
			that.form1.props.title = '添加';
			that.form1.props.show = true;
		},
		// 显示修改页面
		updateBtn({
			item
		}) {
			that.form1.props.action = 'admin/cms/question/sys/update';
			that.form1.props.formType = 'update';
			that.form1.props.title = '编辑';
			that.form1.props.show = true;
			that.form1.data = item;
		},
		// 删除按钮
		deleteBtn({
			item,
			deleteFn
		}) {
			deleteFn({
				action: "admin/cms/question/sys/delete",
				data: {
					_id: item._id
				},
			});
		},
		// 监听 - 批量操作的按钮点击事件
		batchBtn(index) {
			switch (index) {
				case 1:
					vk.confirm(`确定删除所选记录吗`, '提示', '确定', '取消', res => {
						if (res.confirm) {
							let ids = [];
							that.table1.multipleSelection.map((item, index) => {
								ids.push(item._id);
							});
							vk.callFunction({
								url: 'admin/cms/question/sys/batchDelete',
								title: '请求中...',
								data: {
									ids,
								},
								success: function (data) {
									that.$notify({
										message: '批量操作成功!',
										type: 'success'
									});
									that.refresh();
								}
							});
						}
					});
					break;
				case 2:
					vk.prompt("请输入次数", "提示", "确定", "取消", (res) => {
						if (res.confirm) {
							let ids = [];
							that.table1.multipleSelection.map((item, index) => {
								ids.push(item._id);
							});
							if (!vk.pubfn.test(res.content, 'number')) return vk.toast("请输入数字");
							vk.callFunction({
								url: 'admin/cms/question/sys/batchUpdate',
								title: '请求中...',
								data: {
									ids,
									key: 'time',
									value: ~~res.content
								},
								success: function (data) {
									that.$notify({
										message: '批量操作成功!',
										type: 'success'
									});
									that.refresh();
								}
							});
						}
					}, '30');
					break;
				default:
					break;
			}
		}
	},
	// 监听属性
	watch: {

	},
	// 过滤器
	filters: {

	},
	// 计算属性
	computed: {

	}
};
</script>
<style lang="scss" scoped>
.page-body {}
</style>